Appendix B : List of Floppy Disk Commands The 1541 Disk Drive is a flexible device in itself, containing a CPU, RAM and ROM it is a small computer that can execute many commands. Use the following program to send the command to the floppy. 10 OPEN 1, 8, 15 ; Open Command Channel 20 PRINT#1, Command$ ; Send Command 30 CLOSE 1 ; Close Channel With the following program you can display the current floppy status. 10 OPEN 1, 8, 15 ; Open Error Channel 20 INPUT#1, EN$, ER$, TR$, SC$ ; Read Message 30 CLOSE 1 ; Close Channel 40 PRINT "ErrNr: "; EN$ ; Display Results 50 PRINT "Error: "; ER$ 60 PRINT "Track: "; TR$ 70 PRINT "Sector:"; SC$ Power64 emulates the following commands for the emulated Commodore 1541 disk drives: NEW - Format a floppy disk Abbreviation: N Syntax: "NEW:," Where can be up to 16 characters long and can either be omitted (only the directory is erased on a pre-formatted disk) or must be exactly 2 characters long. COPY - Create a copy of a file on the same disk Abbreviation: C Syntax: "COPY:=" or "COPY:=, , ..." If several source files are listed, than the destination file will contain the concatenated contents of all source files. RENAME - Rename a file Abbreviation: R Syntax: "RENAME:=" SCRATCH - Delete files Abbreviation: S Syntax: "SCRATCH:" You can use the wild cards '?' and '*' to delete several files at once. INITIALIZE - Reset the C1541 to power-up condition Abbreviation: I Syntax: "INITIALIZE" VALIDATE - Check and Fix Disk Consistency Abbreviation: V Syntax: "VALIDATE" Validate will fix inconsistencies that can be caused by files that where opened but never closed. Beware: Validate also erases all random files! POSITION - Change the Read/Write Position in a Relative File Abbreviation: P Syntax: "P"+CHR$(Channel)+CHR$(RecLow)+CHR$(RecHi)+CHR$(Pos) OPEN 15, 8, 15 ; Open Command Channel OPEN 5, 8, 5, "RelativeFile,L,";CHR$(40) ; Create Relative File with Recordsize ; 40 Byte PRINT#15,"P"+CHR$(5)+CHR$(17)+CHR$(0)+CHR$(1) ; Set File Position to 1st Byte of ; Record 17 (Numbering for Records and ; BytePos starts with 1 (not 0)) PRINT#5,"Important Data" ; Write Data PRINT#15,"P"+CHR$(5)+CHR$(9)+CHR$(0)+CHR$(4) ; Set File Position to 4th Byte of ; Record 9 (Numbering for Records and ; BytePos starts with 1 (not 0)) INPUT#5,X$ ; Read Data CLOSE 5 ; Close Channel CLOSE 15 ; Close Command Channel BLOCK-READ - Read a Disk Block into the internal floppy RAM Abbreviation: B-R Syntax: "B-R:"+STR$(Channel)+STR$(Drive)+STR$(Track)+STR$(Sector) Example: OPEN 15, 8, 15 ; Open Command Channel OPEN 5, 8, 5, "#" ; Open Channel 5 to RAM buffer PRINT#15,"B-R: 5 0 18 2" ; Read Track 18 / Sector 2 into the buffer for channel 5 PRINT#15,"B-P: 5 0" ; Place Pointer at start of block FOR I = 0 TO 253 ; One Block is max. 254 Byte GET#5, A$ ; Get another Byte IF (ST <> 0) THEN ... ; Check for End of Block ... ; Process Byte NEXT I CLOSE 5 ; Close Channel CLOSE 15 ; Close Command Channel BLOCK-WRITE - Write a Disk Block from the internal floppy RAM Abbreviation: B-W Syntax: "B-W:"+STR$(Channel)+STR$(Drive)+STR$(Track)+STR$(Sector) Example: OPEN 15, 8, 15 ; Open Command Channel OPEN 5, 8, 5, "#" ; Open Channel 5 to RAM buffer PRINT#5, X$ ; Write some string PRINT#5, Y$ ; Write another string PRINT#5, Z$ ; Write yet another string (total: max. 254 Byte) PRINT#15,"B-W: 5 0 18 2" ; Write Track 18 / Sector 2 from the buffer for channel 5 CLOSE 5 ; Close Channel CLOSE 15 ; Close Command Channel BUFFER-POINTER - Set the pointer for a buffered block Abbreviation: B-P Syntax: "B-P:"+STR$(Channel)+STR$(Pos) Example: see BLOCK-READ BLOCK-ALLOCATE - Mark a disk block as used Abbreviation: B-A Syntax: "B-A:"+STR$(Drive)+STR$(Track)+STR$(Sector) Example: OPEN 1, 8, 15 ; Open Command Channel PRINT#1,"B-A: 0 12 7" ; Allocate Block at Track 12 Sector 7 INPUT#1, EN$, ER$, TR$, SC$ ; Get the sector that was allocated CLOSE 1 ; Close Command/Error Channel PRINT "Track:;TR$;"Sector";SC$ BLOCK-FREE - Mark a disk block as unused Abbreviation: B-F Syntax: "B-F:"+STR$(Channel)+STR$(Pos) Example: OPEN 1, 8, 15 ; Open Command Channel PRINT#1,"B-F: 0 12 7" ; Free Block at Track 12 Sector 7 CLOSE 1 ; Close Command/Error Channel BLOCK-EXECUTE - Read a Disk Block into the internal floppy and execute it. Abbreviation: B-E Syntax: "B-E:"+STR$(Channel)+STR$(Drive)+STR$(Track)+STR$(Sector) Note: Block Execute obviously requires the complete emulation of the MOS 6502 CPU in the 1541. If you wish to use this command make sure that the Complete Floppy 1541 Emulation is enabled. Otherwise you will get a 'Command Not Emulated' Error Message. USER1 - Read a Disk Block to the internal floppy RAM Abbreviation: U1 USER1 works like BLOCK-READ with the exception that U1 considers the link to the next block to be part of the data. Thus a block read with U1 will be 256 (rather than max. 254) bytes long. USER2 - Write a Disk Block from the internal floppy RAM Abbreviation: U2 USER2 works like BLOCK-WRITE with the exception that U2 considers the link to the next block to be part of the data. Thus a block written with U2 has to be 256 (rather than max. 254) bytes long. USER3..USER8 - Execute a User Program on the Floppy Abbreviation: U3..U8 Program execution starts at $0500 + 3*(x-3) (i.e. $0500 for U3, $0503 for U4...) Note: Block Execute obviously requires the complete emulation of the MOS 6502 CPU in the 1541. If you wish to use this command make sure that the Complete Floppy 1541 Emulation is enabled. Otherwise you will get a 'Command Not Emulated' Error Message. USERI - Switch the C1541 between C64 to VC20 mode Abbreviation: UI Syntax: "UI+" or "UI-" This is a dummy function in Power64. It causes a slight adjustment of transfer speeds on a real C1541 USERJ - Reset the C1541 to power-up condition Abbreviation: UJ Syntax: "UJ" Substitute for INITIALIZE MEMORY-READ - Read Data from the floppy RAM Abbreviation: M-R (You must use the abbreviation, the full form is not legal). Syntax: "M-R"+CHR$(LowAddress)+CHR$(HighAddress)+CHR$(Size) Example: OPEN 1, 8, 15 ; Open Command Channel PRINT#1, "M-R"+CHR$(52)+CHR$(18)+CHR$(3) ; Specify 3 Bytes ; starting at Addr. $1234 GET#1, A$, B$, C$ ; Get all the Values at once! CLOSE 1 ; Close Channel MEMORY-WRITE - Write Data to the floppy RAM Abbreviation: M-W (You must use the abbreviation, the full form is not legal). Syntax: "M-W"+CHR$(LowAddress)+CHR$(HighAddress)+CHR$(Size) Example: OPEN 1, 8, 15 ; Open Command Channel PRINT#1, "I" ; Initialize Floppy first ! PRINT#1, "M-W"+CHR$(52)+CHR$(18)+CHR$(8) ; Specify Addr. $1234 and 8 Byte PRINT#1, "POWER64" ; Write 8 Byte (incl. CR) CLOSE 1 ; Close Channel MEMORY-EXECUTE - Run a User Program on the Floppy Abbreviation: M-E (You must use the abbreviation, the full form is not legal). Syntax: "M-E"+CHR$(LowAddress)+CHR$(HighAddress) Note: Memory Execute obviously requires the complete emulation of the MOS 6502 CPU in the 1541. If you wish to use this command make sure that the Complete Floppy 1541 Emulation is enabled. Otherwise you will get a 'Command Not Emulated' Error Message.